Query Cost Analysis
あらかじめ決められたクエリのコスト(複雑度)を計算し、それが 閾値 を超えた場合にリクエストを失敗させる
e.g. Shopify
一定時間ごとに Point が割り振られており、この Point を消費してリクエストを行う
Point が無くなるとリクエストが失敗する
Point は以下を元に算出している: https://shopify.dev/docs/api/usage/rate-limits#cost-calculation
Mutation か否か
クエリしているフィールドがどのような種類の値を返すのか
interface や union が含まれているか
Connection を用いていくつのデータをクエリするか
Connection: 関連するオブジェクトのリストを返すフィールド
first や last といった引数で取得するアイテム数を指定でき、その数によってコストが変わる
Point はレスポンスの extensions から確認できる
code:json
{
...
"extensions": {
"cost": {
"requestedQueryCost": 101, // 予測された消費 Point
"actualQueryCost": 46, // 実際の消費 Point
"throttleStatus": {
"maximumAvailable": 1000, // クライアントに割り当てられる Point の上限
"currentlyAvailable": 954, // 残り Point
"restoreRate": 50 // 1 秒ごとに回復する Point
}
}
}
}
e.g. GitHub
https://docs.github.com/ja/graphql/overview/rate-limits-and-node-limits-for-the-graphql-api